home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Opus5.5 / ARexx.lha / ARexx / ADPro_BatchConvert.dopus5 next >
Text File  |  1996-06-13  |  10KB  |  294 lines

  1. /* ADPro_BatchConvert for Directory Opus 5.5 and ADPro 2.5.x
  2.    by Leo 'Nudel' Davidson for Gods'Gift Utilities
  3.    email: leo.davidson@keble.oxford.ac.uk  www: http://users.ox.ac.uk/~kebl0364
  4.  
  5. $VER: ADPro_BatchConvert.dopus5 1.3 (13.6.96)
  6.  
  7.    ------------------------------------------------------------------------
  8.    Call as:
  9.    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  10.    [ARexx]  DOpus5:ARexx/ADPro_BatchConvert.dopus5 {Qp} {Ql} {d}
  11.    Flags:   Rescan Destination
  12.    ------------------------------------------------------------------------
  13.    You are asked for a render mode and images will be scaled so that they
  14.    fill the screen (without changing their aspect). You are given the option
  15.    of doubling the X and Y resolution of image for rendering to modes with
  16.    different aspect to the picture. Finally you are given a choice of
  17.    dither types. Then all pictures selected will be processed and the results
  18.    saved in the destination directory.
  19.  
  20.    Filenames with "JPG", "JPEG", or "GIF" at the end will have their
  21.    extensions removed. The screen-depth is appended to the end of the
  22.    filename, also.
  23.  
  24.    Currently, if ADPro already running, does not restore settings after
  25.    exiting. If this is important let me know.
  26.    ------------------------------------------------------------------------
  27.    The path to ADPro:  (Normally "ADPro:ADPro")
  28.    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  29.  
  30. ADPro = "ADPro:ADPro"
  31.  
  32. /*===================================================================================*/
  33.  
  34. options results
  35. options failat 99
  36. parse arg DOpusPort source_handle.0 dest_path.0 .
  37. DOpusPort = Strip(DOpusPort,"B",'" ')
  38. source_handle.0 = Strip(source_handle.0,"B",'" ')
  39. dest_path.0 = Strip(dest_path.0,"B",'" ')
  40.  
  41. If DOpusPort="" THEN Do
  42.     Say "Not correctly called from Directory Opus 5!"
  43.     Say "Load this ARexx script into an editor for more info."
  44.     EXIT
  45.     END
  46. If ~Show("P",DOpusPort) Then Do
  47.     Say DOpusPort "is not a valid port."
  48.     EXIT
  49.     End
  50. Address value DOpusPort
  51.  
  52. /*===================================================================================*/
  53.  
  54. /* Thanks Edmund */
  55. dopus version
  56. If ( result='RESULT' | translate(result,'.',' ') < 5.1218 ) then do
  57.     dopus request '"This script requires DOpus v5.5 or greater." OK'
  58.     EXIT
  59.     end
  60.  
  61. /*===================================================================================*/
  62.  
  63. Quit_After = "NO"
  64. If ~Show("P",'ADPro') Then Do
  65.     Call Pragma(Stack,20000)
  66.     Address Command "Run >NIL:" ADPro "NS MINIMIZED"
  67.     Address Command "WaitForPort" 'ADPro'
  68.     Quit_After = "YES"
  69.     If ~Show("P",'ADPro') then do
  70.         lister request source_handle.0 '"Error loading ADPro!'|| '0a'x ||'Check its command-path in the ARexx script itself." OK'
  71.         EXIT
  72.         END
  73.     END
  74.  
  75. /*===================================================================================*/
  76.  
  77. BadNumber = 0
  78. failplural = "s"
  79.  
  80. lister set source_handle.0 busy 1
  81.  
  82. lister query source_handle.0 numselentries    /* Get info about selected */
  83. Lister_NumSelEnt = RESULT            /* entries & path to them */
  84. lister query source_handle.0 path
  85. Lister_Path = Strip(RESULT,"B",'"')
  86.  
  87. lister set source_handle.0 newprogress abort bar info file name title
  88. lister set source_handle.0 newprogress title "Converting pictures... (0 fails)"
  89. lister set source_handle.0 newprogress info "Setting up..."
  90. lister set source_handle.0 newprogress bar Lister_NumSelEnt 0
  91.  
  92. /*===================================================================================*/
  93.  
  94. /* Could save the current settings for restoration later, but I don't
  95.    really care about them. */
  96.  
  97. Address "ADPro"
  98. OBTAIN_ADPRO            /* You're mine! */
  99. /*-----------------------------------------------------------------------------------**
  100.    Get Screen Mode
  101. **-----------------------------------------------------------------------------------*/
  102. ADPRO_TO_FRONT
  103. GET_SCREEN_MODE "'Select render mode'" "Amiga" 167972 1440 564 "HAM8"
  104. parse var adpro_result mode.type mode.id MaxWidth MaxHeight mode.depth
  105. mode.depth = Strip(mode.depth)
  106. SET_RENDER_MODE mode.type mode.id MaxWidth MaxHeight mode.depth
  107. /*-----------------------------------------------------------------------------------**
  108.    Get Dither type
  109. **-----------------------------------------------------------------------------------*/
  110. GETLIST DITHERS
  111. dither_list = ADPRO_RESULT
  112.  
  113. allents = dither_list
  114. entries=0
  115. do while allents~=''
  116.     entries=entries+1
  117.     parse var allents '"' spam '"' allents
  118.     end
  119.  
  120. ADPRO_TO_FRONT
  121. LISTVIEW '"Select Dither Mode:"' entries ITEMS dither_list
  122. If RC > 1 Then call END_ABORT_EARLY
  123. parse var ADPRO_RESULT '"' dither_mode '"' spam
  124.  
  125. If dither_mode = "Off" then
  126.     dither_set = 0
  127. Else do
  128.     spam = word(dither_mode,words(dither_mode))
  129.     parse var spam "(" dither_set ")"
  130.     end
  131.  
  132. dither dither_set
  133. /*-----------------------------------------------------------------------------------**
  134.    Get Aspect Correction
  135. **-----------------------------------------------------------------------------------*/
  136. ADPRO_TO_FRONT
  137. OKAYN "Scale" '"Double horizontal resolution?"' "Yes|No"
  138. If RC = 1 Then  WidthScale = 2
  139.       Else  WidthScale = 1
  140. OKAYN "Scale" '"Double vertical resolution?"' "Yes|No"
  141. If RC = 1 Then HeightScale = 2
  142.       Else HeightScale = 1
  143. /*-----------------------------------------------------------------------------------**
  144.    Handle the rest.
  145. **-----------------------------------------------------------------------------------*/
  146. PWidth "ENHANCED"        /* Enhanced palette accuracy */
  147. LFormat "UNIVERSAL"        /* Load anything you can! */
  148. SFormat "IFF"            /* Save as IFF format (See save part, too) */
  149. RMode "LOCKED"            /* Lock the screen mode */
  150. RDepth "LOCKED"            /* Lock the screen depth */
  151. /*===================================================================================*/
  152.  
  153. Address value DOpusPort
  154. dopus front
  155. /*===================================================================================*/
  156.  
  157. BarTotal = 3 * Lister_NumSelEnt
  158.  
  159. Do i=1 to Lister_NumSelEnt
  160.     lister query source_handle.0 firstsel
  161.     Temp_Name = Strip(RESULT,"B",'"')
  162.     Temp_Path = Lister_Path || Temp_Name
  163.  
  164.     lister set source_handle.0 newprogress name Temp_Name
  165.     lister set source_handle.0 newprogress bar Lister_NumSelEnt i
  166.  
  167.     lister query source_handle.0 abort
  168.     If RESULT=1 Then Call END_ABORT
  169.     lister set source_handle.0 newprogress file BarTotal (3 * i - 3)
  170.     lister set source_handle.0 newprogress info "Loading..."
  171.  
  172.     Address "ADPro" LOAD '"'Temp_Path'"'
  173.     If RC~=0 Then Do
  174.         BadNumber = BadNumber + 1
  175.         If BadNumber = 1 Then failplural = ""
  176.         Else If BadNumber = 2 Then failplural = "s"
  177.         BadList.BadNumber = Temp_Name
  178.         lister set source_handle.0 newprogress title "Converting pictures... ("BadNumber "fail"failplural")"
  179.         End
  180.     Else Do
  181.  
  182.         Address "ADPro" XSIZE;ImageWidth = ADPRO_RESULT
  183.         Address "ADPro" YSIZE;ImageHeight = ADPRO_RESULT
  184.         DesiredHeight = HeightScale * ImageHeight
  185.         DesiredWidth  = WidthScale  * ImageWidth
  186.  
  187. /*-----------------------------------------------------------------------------------*/
  188.  
  189.         lister query source_handle.0 abort
  190.         If RESULT=1 Then Call END_ABORT
  191.         lister set source_handle.0 newprogress file BarTotal (3 * i - 2)
  192.         lister set source_handle.0 newprogress info "Scaling..."
  193.  
  194.         /* If it's smaller than the max area, enlarge it */
  195.         IF DesiredHeight < MaxHeight THEN DO
  196.             Scale = MaxHeight / DesiredHeight
  197.             DesiredHeight = DesiredHeight * Scale
  198.             DesiredWidth = DesiredWidth * Scale
  199.             END
  200.         IF DesiredWidth < MaxWidth THEN DO
  201.             Scale = MaxWidth / DesiredWidth
  202.             DesiredHeight = DesiredHeight * Scale
  203.             DesiredWidth = DesiredWidth * Scale
  204.             END
  205.  
  206.         /* Make sure it isn't bigger than the max-area */
  207.         IF DesiredHeight > MaxHeight THEN DO
  208.             Scale = MaxHeight / DesiredHeight
  209.             DesiredHeight = DesiredHeight * Scale
  210.             DesiredWidth = DesiredWidth * Scale
  211.             END
  212.         IF DesiredWidth > MaxWidth THEN DO
  213.             Scale = MaxWidth / DesiredWidth
  214.             DesiredHeight = DesiredHeight * Scale
  215.             DesiredWidth = DesiredWidth * Scale
  216.             END
  217.  
  218.         Address "ADPro" ABS_SCALE DesiredWidth DesiredHeight
  219.  
  220. /*-----------------------------------------------------------------------------------*/
  221.  
  222.         lister query source_handle.0 abort
  223.         If RESULT=1 Then Call END_ABORT
  224.         lister set source_handle.0 newprogress file BarTotal (3 * i - 1)
  225.         lister set source_ha